package com.wjw.java.others.interface_.demo;

public class Computer {

    public static void main(String[] args) {
        Computer computer = new Computer();
        //1.接口的多态表现：接口的引用指向其接口的实现类
        //接口 接口名 = new 接口的实现类();
        System.out.println("======接口的实现类：作为方法的形参======");
        DBIterface mysql = new MysqlDBImpl();
        DBIterface oracle = new OracleDBImpl();
        computer.connectDB(mysql);//电脑连接mysql数据库
        computer.connectDB(oracle);//电脑连接oracle数据库

        System.out.println("======调用接口中的：default和static方法======");
        mysql.defaultMethod();//接口中的默认实现实现方法
        DBIterface.staticMethod();//接口中的静态方法
        //DBIterface.num = 200; //接口中的属性都是常量,无法修改

        //2.多态数组(接口类型)
        System.out.println("======数组的类型可以是：接口类型======");
        DBIterface [] dbs = new DBIterface[2];
        dbs[0] = mysql;//new MysqlDBImpl()
        dbs[1] = oracle;//new OracleDBImpl()
        for (int i = 0; i < dbs.length; i++) {
            if(dbs[i] instanceof MysqlDBImpl){//判断它的运行类型,看=右边
                //向下转型为MysqlDB,并调用MysqlDB特有的call()
                MysqlDBImpl mysqlDB = (MysqlDBImpl)dbs[i];
                mysqlDB.call();
            }
            if(dbs[i] instanceof OracleDBImpl){//判断它的运行类型,看=右边
                //向下转型为OracleDB,并调用OracleDB特有的call()
                OracleDBImpl oracleDB = (OracleDBImpl)dbs[i];
                oracleDB.call();
            }
        }
    }

    //3.多态形参：接口的实现类可以做为方法的形参
    public void connectDB(DBIterface usbIterface){//接口可以作为方法的入参
        usbIterface.start();
        usbIterface.stop();
    }
}
